#include "esp_log.h"
#include "esp_adc/adc_oneshot.h" 
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "math.h"
#include "geminai_gpio.h"
#include "geminai_log.h"

extern adc_oneshot_unit_handle_t adc1_handle;
extern adc_oneshot_unit_handle_t adc2_handle;

void ADC_NTC0_Init(void);       //柜体温度检测
void ADC_NTC1_Init(void);       //蒸发风机温度检测
void ADC_NTC2_Init(void);       //冷凝温度检测
void ADC_NTCTA_Init(void);      //环境温度检测
void ADC_battery_Init(void);    //ADC检测电池电压（拉低BAT_EN后进行检测）
void ADC_VN0_Init(void);        //ADC检测硬件版本号
void ADC_LIGHT_Init(void);      //灯光电流检测
void _24V_INT_Init(void);       //外部电压检测
void _3_3v_INT_Init(void);       //vret电压检测

uint32_t adc1_read(uint32_t channel,int times);//读取ADC1对应通道的量化电平值，times为采样次数
uint32_t adc2_read(uint32_t channel,int times);//读取ADC2对应通道的量化电平值，times为采样次数

double ntc0_get_temp(void);             //获取NTC0柜体温度
double ntc1_get_temp(void);             //获取NTC1蒸发风机温度
double ntc2_get_temp(void);             //获取NTC2冷凝温度
double read_battery_voltage(void);      //获取电池电压
double adc_vn0_read(void);              //获取版本号
double adc_light_read(void);            //获取灯光电流
double _24V_INT_Read(void);             //获取24V输入电压
double _3_3V_INT_Read(void);             //获取3.3V输入电压
double get_NTCrx(void);                  //获取NTC_TA环境温度

void adc_calibration_deini_LIGHT(void);  //释放灯光校准

void adc_init(void);    //adc初始化
int calculate_remaining_capacity(void);    //计算电池电量
void example_adc_calibration_deinit(adc_cali_handle_t handle);
bool example_adc_calibration_init(adc_unit_t unit, adc_channel_t channel, adc_atten_t atten, adc_cali_handle_t *out_handle);